package org.chnxi.leetcode.problems.ques19;

/**
 *
 * 执行用时 :1 ms, 在所有 Java 提交中击败了29.75%的用户
 * 内存消耗 :38 MB, 在所有 Java 提交中击败了5.43%的用户
 */
public class Simple01 {

    public static void main(String[] args) {
        ListNode ln0 = new ListNode(0);

        ListNode ln1 = new ListNode(1);
        ln0.next = ln1;

        ListNode ln2 = new ListNode(2);
        ln1.next = ln2;

        ListNode ln3 = new ListNode(3);
        ln2.next = ln3;

        ListNode ln4 = new ListNode(4);
        ln3.next = ln4;

        ListNode result = removeNthFromEnd(ln0 , 2);
        System.out.println(result);
    }

    public static ListNode removeNthFromEnd(ListNode head, int n) {

        n = 0 - n; //计算跳过的节点数量
        ListNode delLN = head;  //记录要删除节点的父节点
        ListNode loopLN = head; //循环使用

        do{
            //跳过前n个节点
            if(n >0){
                delLN = delLN.next;
            }
            n++;
        }while ((loopLN = loopLN.next) != null);

        if(n <= 0){  //要删除的是头节点
            head = head.next;
        }else {  //删除非头节点
            delLN.next = delLN.next.next;
        }

        return head;

    }
}
